﻿#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable:6031)

#include<stdio.h>
/*求两个整型数据的和。

		分析：
		返回值：x+y
		返回值类型：int

		函数名：Addcount

		形参需要几个  2
		每一个是什么类型  int
		形参列表：int x,int y

		函数架子怎么写*/
//int Addcount(int x, int y)
//{
//	return x + y;
//}
//int main()
//{
//		int a = 2;
//		int b = 4;
//		int sum = Addcount(a, b);
//		printf("%d", sum);
//}
//需求：
//判断一个数据是不是水仙花数，是返回1不是返回0
//
//
//分析：
//实现功能：判断一个数据是不是水仙花数，是返回1不是返回0
//返回值：要
//返回值类型：int
//
//函数名：judgment
//
//形参需要几个 1
//每一个是什么类型 int 
//形参列表： int x
//
//函数架子怎么写
// int judgement(int x)
//
//实现逻辑：
//int judgement(int x);
//int main()
//{
//	int num;
//	printf("请输入一个三位数：");
//	scanf("%d",&num);
//	int temp = judgement(num);
//	if (temp == 1)
//	{
//		printf("%d是水仙花数", num);
//	}
//	else
//	{
//		printf("%d不是水仙花数", num);
//	}
//}
//
//int judgement(int x)
//{
//	int i = x % 10;//个位数
//	int j = x / 10 % 10;//十位数
//	int k = x / 100 % 10;//十位数
//	if (x == i * i * i + j * j * j + k * k * k)
//	{
//		return 1;
//	}
//	else
//	{
//		return 0;
//	}	
//
//}
//1、子函数定义一个函数求1 + 2 + 3 + .... + n的和
//主函数 输入一个数据 ，调用子函数后传入该数据，获取结果后再主函数中打印
//int Addcount(int x);
//int main()
//{
//	int n;
//	printf("请输入一个数字：");
//	scanf("%d", &n);
//	int s = Addcount(n);
//	printf("和：%d",s);
//}
//int Addcount(int x)
//{
//	int sum = 0;
//	int i;
//	for (i = 1; i <= x; i++)
//	{
//		sum += i;
//	}
//	return sum;
//}
//
//2、定义一个函数求某年某月某日是这一年的第几天，在主函数中调用该功能。
//int getDay(int year, int month);
//int countDay(int year, int month, int day);
//int main()
//{
//	int year, month, day;
//	printf("请输入年月日：");
//	scanf("%d%d%d",&year,&month,&day);
//	int days = countDay(year, month, day);
//	printf("共有%d天",days);
//}
//// 获取某年某月有多少天
//int getDay(int year, int month)
//{
//	if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 11)
//	{
//		return 31;
//	}
//	else if (month == 2 || month == 4 || month == 6 || month == 9 || month == 12)
//	{
//		return 30;
//	}
//	else
//	{
//		if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
//		{
//			return 29;
//		}
//		else
//		{
//			return 28;
//		}
//	}
//}
//// 计算某年某月某日是这一年的第几天
//int countDay(int year, int month,int day)
//{
//	int Day, sum = 0;
//	for (int i = 1; i < month; i++)
//	{
//		//求year年i月有多少天
//		sum += getDay(year, i);
//	}
//	Day = sum + day;
//	return Day;
//}
//3、自己写一个函数求字符串的数据个数，不能使用strlen。
//int str(char* p);
//int main()
//{
//	char str1[30];
//	printf("请输入一串字符：");
//	scanf("%s",str1);
//	int count = str(str1);
//	printf("字符串的数据个数：%d",count);
//}
//
//int str(char* p)
//{
//	int sum = 0;
//	int i = 0;
//	while (p[i] != '\0')
//	{
//		sum++;
//		i++;
//	}
//	return sum;
//}

//用地址传值交换两个数
//void swap(int* p1, int* p2);
//
//int main()
//{
//	int a, b;
//	printf("输入两个数：");
//	scanf("%d%d", &a, &b);
//	swap(&a, &b);
//	printf("交换后：%d %d", a, b);
//}
//void swap(int* p1, int* p2)
//{
//	int temp = *p1;
//	*p1 = *p2;
//	*p2 = temp;
//}

//利用递归将十进制转为二进制

//void digui(int n)
//{
//	if (n == 0)
//	{
//		return ;
//	}
//	else
//	{
//		//前
//		int res = n / 2;
//		//调用
//		digui(res);
//		//后
//		printf("%d", n % 2);
//	}
//	
//}
//
//int main()
//{
//	int num;
//	printf("输入一个十进制数：");
//	scanf("%d", &num);
//	digui(num);
//	
//}
//将十进制转二进制 ，合成数据
//void digui(int n)
//{
//	if (n == 0)
//	{
//		return;
//	}
//	//前
//	int res = n / 2;
//	//调用
//	digui(res);
//	//后
//	printf("%d", n % 2);
//}
//
//int main()
//{
//	int num;
//	printf("输入一个十进制数：");
//	scanf("%d", &num);
//	digui(num);
//
//}
//1.输入一个华氏温度，输出摄氏温度，计算公式为c = 5 / 9 * (F - 32)。要求结果保留两位小数。
//写一个函数实现温度转换
//主函数输入
//结果在主函数打印
//
//返回值类型 ：float
//函数名 : temperature
//形参列表：float fahr
//功能：输入一个华氏温度，输出摄氏温度
//float temperature(float fahr);
//
//int main()
//{
//	float temp;
//	printf("请输入华氏温度：");
//	scanf("%f",&temp);
//	float temper = temperature(temp);
//	printf("摄氏温度:%.2f",temper);
//}
//float temperature(float fahr)
//{
//	float t = 5 * (fahr - 32) / 9;
//	return t;
//}
//2.从键盘输入N和A的值，计算 a + aa + aaa + aaaa + .... + aa...a(n个a)的值
//3   5              5 + 55 + 555
//4   6              6 + 66 + 666 + 6666
//主函数输入两个值
//结果返回在主函数中打印
////返回值类型 ：int
////函数名 : Addcount
////形参列表：int n a
////功能：输入N和A的值，计算 a + aa + aaa + aaaa + .... + aa...a(n个a)的值
//int Addcount(int n, int a);
//int main()
//{
//	int N, A;
//	printf("请从键盘输入N和A的值:");
//	scanf("%d%d",&N,&A);
//	int count = Addcount(N, A);
//	printf("和：%d",count);
//}
//
//int Addcount(int n, int a)
//{
//	int next = 0, sum = 0;
//	for (int i = 1; i <= n; i++)
//	{
//		next = next * 10 + a;
//		sum += next;
//	}
//	return sum;
//}
//1、使用递归求n!
//循环思路：n != 1 * 2 * 3 * 。。。。n
//递归思路：n != n * (n - 1)!
//4！ = 4 * 3！
//3！ = 3 * 2!
//2!= 2 * 1!
//1!= 1
//
//(1)递归
//int Fact(int n)
//{
//	if (n <= 0)
//	{
//		return 1;
//	}
//	else
//	{
//		return n * Fact(n - 1);
//	}
//}
//int main()
//{
//	int N;
//	printf("请输入一个数：");
//	scanf("%d",&N);
//	int res = Fact(N);
//	printf("%d!=%d",N,res);
//}
// (2)迭代
//int Fact(int n)
//{
//	int ret = 1;
//	int i;
//	for (i = 1; i <= n; i++)
//	{
//		ret *= i;
//	}
//	return ret;
//}
//int main()
//{
//	int N;
//	printf("请输入一个数：");
//	scanf("%d",&N);
//	int res = Fact(N);
//	printf("%d!=%d",N,res);
//}
//2、使用递归/迭代求斐波那契额数列数列第n项的值。  1  1  2   3  5  8  13 21
//循环思路：
//递归思路：
//int feibo(int n)
//{
//    如果 n == 1  或者 n == 2   返回 1
//
//        结果 = feibo(n - 1) + feibo(n - 2)
//}
//(1)递归
//int Fib(int N)
//{
//	if (N <= 2)
//	{
//		return 1;
//	}
//	else
//	{
//		return Fib(N - 2) + Fib(N - 1);
//	}
//}
//int main()
//{
//	int n;
//	printf("请输入一个数：");
//	scanf("%d",&n);
//	int res = Fib(n);
//	printf("斐波那契额数列数列第%d项的值:%d", n, res);
//}
//（2）迭代
//int Fib(int N)
//{
//	int a = 1;
//	int b = 1;
//	int next = 1;
//	while (N > 2)
//	{
//		next = a + b;
//		a = b;
//		b = next;
//		N--;
//	}
//	return next;
//}
//int main()
//{
//	int n;
//	printf("请输入一个数：");
//	scanf("%d",&n);
//	int res = Fib(n);
//	printf("斐波那契额数列数列第%d项的值:%d", n, res);
//}